package tech.aistar.corejava.day11;

import java.util.Iterator;
import java.util.LinkedList;

/**
 * @Author: lya
 * @Description: 本类的作用描述:
 *          1. - 添加元素到头或则尾
 *          2. - 获取但是不移除头或则尾
 *          3. - 获取头并且移除
 *          4. - 获取尾并且移除
 * @CreateDate: 2019/7/29
 * @Version: 1.0
 */
public class LinkedListDemo {
    public static void main(String[] args) {
        //创建一个LinkedList对象
        LinkedList<String> list = new LinkedList<>();

        list.add("java");
        list.add("mysql");
        list.add("python");
        list.add("xml");

        //演示特有的 - 集中在对集合的头和尾部进行操作

        //将元素添加的链表的头部
        list.addFirst("oracle");//void无返回类型
        System.out.println(list.offerFirst("sum"));//Boolean true

        //将元素添加到链表的尾部
        list.add("abc");//bBoolean  true
        list.addLast("end");//void无法返回值类型

        System.out.println(list);

        //获取头部
        System.out.println(list.getFirst());
        System.out.println(list.peekFirst());//和peek()源码一样

        //获取尾部
        System.out.println(list.getLast());
        System.out.println(list.peekLast());

        //获取并且移除头部
        System.out.println(list.remove());//sum    和removeFirst()一样
        System.out.println(list.removeFirst());//sum

        //获取并且移除尾部
        System.out.println(list.removeLast());//end

        //遍历方式
        //直接输出
        //普通for循环
        //增强for循环
        //迭代器
        //每种集合的底层的数据结构是不一样的 - 遍历方式是不一样的
        //提供统一的方法 - 迭代器
        System.out.println("==========");
        Iterator<String> iter = list.iterator();
        while(iter.hasNext()){
            String e = iter.next();
            System.out.println(e);
        }


    }


}
